skip navigation
skip mega-menu
Posts

使用LangChain和ChatGPT API的第一步-实践见解

您可以创建一个简单的命令行工具,通过命令行与ChatGPT API进行交互. Here's how.

我们将用Python编写一个简单的脚本,它通过命令行读取问题并连接到 ChatGPT API using LangChain 并检索答案,然后将交互结果存储在一个简单的文本文件中.

生成的文本文件捕获对话,看起来像这样:

Langchain Session at 2023-06-02T122046 with gpt-3.5-turbo

2023-06-02T122147:
问:哪些是计算机科学中最常用的算法?
A:计算机科学中有很多算法,但最常用的有:

1. 排序算法:这些算法用于按特定顺序对数据进行排序, such as alphabetical or numerical.

2. 搜索算法:这些算法用于在较大的数据集中查找特定数据.

3. 图形算法:这些算法用于分析和操作图形, 哪些用来表示对象之间的关系.

4. 动态规划算法:这些算法用于通过将复杂问题分解成更小的问题来解决复杂问题, more manageable sub-problems.

5. 分治算法:这些算法通过将问题分解成更小的问题来解决问题, more manageable parts.

6. 贪心算法:这些算法用于通过在每一步做出最佳选择来解决优化问题.

7. 回溯算法:这些算法用于通过尝试不同的解决方案来解决问题,并在发现解决方案不正确时回溯.

8. 随机算法:这些算法用于通过随机化找到解决方案来解决问题.

2023-06-02T122247:
问:哪些是计算机科学中最流行的排序算法?
A:在计算机科学中最流行的排序算法是:

1. Bubble Sort
2. Selection Sort
3. Insertion Sort
4. Merge Sort
5. Quick Sort
6. Heap Sort
7. Radix Sort
8. Counting Sort
9. Bucket Sort
10. Shell Sort

这些算法被广泛应用于各种应用中,并在大多数计算机科学课程中教授.

2023-06-02T122428:
问:你能给我展示一个用Rust写的堆排序的实现吗?
A:当然,这是Rust中堆排序的实现:

```rust
fn heap_sort(arr: &mut [i32]) {
let len = arr.len();
for i in (0..len / 2).rev() {
heapify(arr, len, i);
}
for i in (1..len).rev() {
arr.swap(0, i);
heapify(arr, i, 0);
}
}

fn heapify(arr: &mut [i32], n: usize, i: usize) {
let mut largest = i;
let left = 2 * i + 1;
let right = 2 * i + 2;
if left < n && arr[left] > arr[largest] {
largest = left;
}
if right < n && arr[right] > arr[largest] {
largest = right;
}
if largest != i {
arr.swap(i, largest);
heapify(arr, n, largest);
}
}

fn main() {
let mut arr = [5, 2, 9, 1, 5, 6];
heap_sort(&mut arr);
println!("{:?}", arr);
}
```

In this implementation, ‘ heap_sort ’接受对‘ i32 ’值数组的可变引用,并使用堆排序算法对其进行排序. ‘ heapify ’函数是一个辅助函数,它从给定数组递归地构建最大堆. ‘ main ’函数演示了如何使用‘ heap_sort ’函数对数组进行排序.

Pre-requisites

Conda,一个Python包管理器被用来创建一个专用的环境 LangChain and the OpenAI packages were installed.

为了用Conda创建一个环境,我们执行了下面的命令:

conda create --name langchain python=3.10

These are the commands used to install the packages:

conda install -c conda-forge openai
conda install -c conda-forge langchain

如果你想导入环境定义,这里是我用Conda创建的环境的定义导出文件:

view rawenvironment.yml hosted with ❤ by GitHub

你还需要在OpenAI网站上生成一个API密钥: http://platform.openai.com/account/api-keys

我最终使用了付费帐户来使用API. You can check more about payment options here:

OpenAI API:

An API for accessing new AI models developed by OpenAI

platform.openai.com


The Python Script

脚本首先导入一些标准的Python库,然后是我们聊天所需的LangChain包:

import sys
import os
import re
from pathlib import Path
from datetime import datetime

# LangChain
from langchain.chat_models import ChatOpenAI
from langchain.schema import (
HumanMessage
)

Then we initialize some configuration parameters, 包括OpenAI密钥和我们想要使用的模型.

# Configuration
# Put here your API key
os.environ["OPENAI_API_KEY"] = ''

# Put here your model
# Other possible options for chatting are 'gpt-3.5-turbo-0301'.
model_name = "gpt-3.5-turbo"

There should be other models coming up soon. I have tried gpt-4 但这抛出了一个错误,因为我没有访问公共API测试版. Here is some extra information on other models.

在此之后,您只需创建用于与您想要使用的模型的REST API交互的主对象:

# Initialize the chat object.
ChatOpenAI(model_name=model_name, temperature=0)

在这里,我们使用选定的模型和a初始化聊天对象 temperature of 0,这是为了减少响应的随机性. The default value for temperature is 1. Check for more information about this parameter here.

该脚本包含一个用于生成当前日期的方法:

def generate_iso_date():
current_date = datetime.now()
return re.sub(r"\.\d+$", "", current_date.isoformat().replace(':', ''))

还有一个用来捕获聊天内容的类:

class ChatFile:
def __init__(self, current_file: Path, model_name: str) -> None:
self.current_file = current_file
self.model_name = model_name
print(f"Writing to file {current_file}")
with open(self.current_file, 'w') as f:
f.在{generate_iso_date()}上写入(f“Langchain Session ”.model_name}\n\n")

def store_to_file(self, question: str, answer: str):
print(f"{answer}")
with open(self.current_file, 'a') as f:
f.write(f"{generate_iso_date()}:\nQ: { question}\nA: {answer}\n\n")

# Create a chat file
chat_file = ChatFile(Path(f"{model_name}_{generate_iso_date()})).txt"), model_name)

然后是一个简单的循环,它读取用户输入并将输入发送到ChatGPT模型,接收答案并将其显示在控制台上并将其保存在本地文件中.

for line in sys.stdin:
print(f"[{model_name}]", end =">> ")
question = line.strip()
if 'q' == question:
break
LLM以提示符作为输入并输出补全
resp = chat([HumanMessage(content=question)])
answer = resp.content
chat_file.store_to_file(question, answer)

Here is the whole script:


Conclusion

LangChain提供了与ChatGPT的简单集成,您可以通过上面所示的简单脚本使用它. 你只需要有一个OpenAI密钥,在大多数情况下,一个付费的OpenAI帐户.

ChatGPT 4模型尚未向更广泛的公众开放, so for now most people will have to stick to ChatGPT 3.5 models.


Gil Fernandes, Onepoint Consulting

Subscribe to our newsletter

Sign up here