模型接口调用

依赖包安装

 
pip install python-dotenv  #读取文件中的环境变量
pip install openai

环境变量配置与加载:默认加载 .env 文件中的环境变量

 
from dotenv import load_dotenv  

# 加载".env"文件  
load_dotenv()  
    
# 现在你可以通过os.getenv来获取环境变量了  
import os  
    
my_secret_key = os.getenv("MY_SECRET_KEY")  
print(my_secret_key)

 
确保你的 .env 文件位于你的项目根目录或你指定的目录中,
并且包含了你需要的环境变量,如 MY_SECRET_KEY=some_secret_value。

加载指定的文件

 
from dotenv import load_dotenv, find_dotenv
_ = load_dotenv(find_dotenv(filename="env.txt"))
    

 

    

 
from openai import OpenAI

# 初始化 OpenAI 客户端
client = OpenAI()  # 默认使用环境变量中的 OPENAI_API_KEY 和 OPENAI_BASE_URL
    

 
# 基于 prompt 生成文本
# 默认使用 gpt-3.5-turbo 模型
def get_completion(prompt, response_format="text", model="gpt-3.5-turbo"):
    messages = [{"role": "user", "content": prompt}]    # 将 prompt 作为用户输入
    response = client.chat.completions.create(
        model=model,
        messages=messages,
        temperature=0,                                  # 模型输出的随机性,0 表示随机性最小
        # 返回消息的格式,text 或 json_object
        response_format={"type": response_format},
    )
    return response.choices[0].message.content          # 返回模型生成的文本

 
print(get_completion("常用的数据结构与算法有哪些"))

 
常用的数据结构包括:

1. 数组(Array)
2. 链表(Linked List)
3. 栈(Stack)
4. 队列(Queue)
5. 树(Tree)
6. 图(Graph)
7. 哈希表(Hash Table)
8. 堆(Heap)

常用的算法包括:

1. 排序算法(如快速排序、归并排序、插入排序、冒泡排序等)
2. 搜索算法(如二分查找、深度优先搜索、广度优先搜索等)
3. 动态规划(Dynamic Programming)
4. 贪心算法(Greedy Algorithm)
5. 回溯算法(Backtracking)
6. 分治算法(Divide and Conquer)
7. 图算法(如最短路径算法、最小生成树算法等)
8. 字符串匹配算法(如KMP算法、Boyer-Moore算法等)

gpt-4o-mini

 
from openai import OpenAI

client = OpenAI()

stream = client.chat.completions.create(
    model="gpt-4o-mini",
    messages=[{"role": "user", "content": "请使用C语言实现一个数组的数据结构"}],
    stream=True,
)
for chunk in stream:
    if chunk.choices[0].delta.content is not None:
        print(chunk.choices[0].delta.content, end="")

 
当然可以!下面是一个简单的数组数据结构的实现示例,包括基本的功能,如初始化、插入元素、删除元素和打印数组内容。

```c
#include 
#include 

#define MAX_SIZE 100  // 定义数组的最大容量

typedef struct {
    int *data;       // 动态分配的数组
    int size;        // 当前数组大小
    int capacity;    // 数组的最大容量
} Array;

// 初始化数组
Array* createArray(int capacity) {
    Array *arr = (Array*)malloc(sizeof(Array));
    arr->capacity = capacity;
    arr->size = 0;
    arr->data = (int*)malloc(capacity * sizeof(int));
    return arr;
}

// 插入元素
void insert(Array *arr, int element) {
    if (arr->size < arr->capacity) {
        arr->data[arr->size++] = element;
    } else {
        printf("数组已满,无法插入元素 %d\n", element);
    }
}

// 删除元素
void delete(Array *arr, int index) {
    if (index >= 0 && index < arr->size) {
        for (int i = index; i < arr->size - 1; i++) {
            arr->data[i] = arr->data[i + 1];
        }
        arr->size--;
    } else {
        printf("索引越界,无法删除元素\n");
    }
}

// 打印数组
void printArray(Array *arr) {
    printf("数组元素: ");
    for (int i = 0; i < arr->size; i++) {
        printf("%d ", arr->data[i]);
    }
    printf("\n");
}

// 释放数组
void freeArray(Array *arr) {
    free(arr->data);
    free(arr);
}

int main() {
    Array *arr = createArray(MAX_SIZE);

    insert(arr, 10);
    insert(arr, 20);
    insert(arr, 30);
    printArray(arr);

    delete(arr, 1);  // 删除索引为1的元素
    printArray(arr);

    freeArray(arr);
    return 0;
}
```

### 说明:
1. **数据结构**:
    - `Array` 结构体包含指向动态分配内存的指针、当前数组大小和数组最大容量。

2. **功能**:
    - `createArray`:初始化数组。
    - `insert`:在数组末尾插入元素。
    - `delete`:根据索引删除元素。
    - `printArray`:打印数组内容。
    - `freeArray`:释放申请的内存。

3. **主函数**:
    - 创建一个数组,插入一些元素,展示数组内容,删除一个元素,最后输出更新后的数组并释放内存。

你可以运行这个代码并根据需要进行修改或扩展。

 


流式调用

 
from openai import OpenAI

client = OpenAI()

stream = client.chat.completions.create(
    model="gpt-4o-mini",
    messages=[{"role": "user", "content": "请使用C语言实现一个数组的数据结构"}],
    stream=True,
)
for chunk in stream:
    if chunk.choices[0].delta.content is not None:
        print(chunk.choices[0].delta.content, end="")
    

 


 
from openai import OpenAI

def get_completion(prompt, model="gpt-3.5-turbo-1106"):
    '''封装 openai 接口'''
    messages = [{"role": "user", "content": prompt}]
    client = OpenAI() 
    response = client.chat.completions.create(
        model=model,
        messages=messages,
        temperature=0.9,  # 模型输出的随机性,0 表示随机性最小
    )
    return response.choices[0].message.content
    

 
prompt = """
我是七三学徒,热爱新技术,对AI有浓厚的兴趣,

请问七三学徒是谁?
"""
get_completion(prompt)
    

 
'七三学徒通常指受过严格训练的学徒,以“七分师傅,三分学徒”来形容。这个成语源自中国古代,形容学徒在师傅的指导下学习技艺。'

```temperature=0
'七三学徒通常指的是中国著名科学家、工程师和教育家钱学森。他被称为“七三学徒”是因为他在1937年以73岁高龄获得了加拿大麦吉尔大学的博士学位。钱学森是中国现代航空航天事业的奠基人之一,也是中国的科学家和教育家。'
```
    

 
prompt = """
七三学徒是一个热爱新技术,对AI有浓厚的兴趣的人

请问七三学徒是谁?
"""
get_completion(prompt)

 
'七三学徒是一个虚构的人物,通常用来形容对新技术和人工智能有浓厚兴趣的人。'

 


 


system role

 
from openai import OpenAI
from dotenv import load_dotenv, find_dotenv
_ = load_dotenv(find_dotenv())

client = OpenAI(
)

# 消息
messages = [
    {
        "role": "system",
        "content": "我是七三学徒,热爱新技术,对AI有浓厚的兴趣"  # 注入新知识
    },
    {
        "role": "user",
        "content": "请问七三学徒是谁?"  # 问问题。可以改改试试
    },

]

# 调用 GPT-3.5
chat_completion = client.chat.completions.create(
    model="gpt-3.5-turbo",
    messages=messages
)

# 输出回复
print(chat_completion.choices[0].message.content)

 
七三学徒是一个虚拟角色,代表一个热爱学习、积极探索新知识的学习者。
在这里,我作为七三学徒角色与您交流,分享知识,解答问题。
欢迎提出您感兴趣的问题,让我们一起探讨学习、科技和其他话题!

结合前面的例子,可以充分体会 system role这个角色
这个是指定系统是个什么角色,
这里呢,在体系里说的是“我”,LLM折中处理了这个过程... 

这么难回答的一个问题,使用user role,结果就会大不相同

 
from openai import OpenAI
from dotenv import load_dotenv, find_dotenv
_ = load_dotenv(find_dotenv())

client = OpenAI(
)

# 消息
messages = [
    {
        "role": "user",
        "content": "我是七三学徒,热爱新技术,对AI有浓厚的兴趣"  # 注入新知识
    },
    {
        "role": "user",
        "content": "请问七三学徒是谁?"  # 问问题。可以改改试试
    },

]

# 调用 GPT-3.5
chat_completion = client.chat.completions.create(
    model="gpt-3.5-turbo",
    messages=messages
)

# 输出回复
print(chat_completion.choices[0].message.content)
    

 
“七三学徒”是一个由网络上的一个匿名程序员所使用的ID或网名,通常在技术相关的讨论或社交平台上被使用。他(或她)可能以此来表达对自己在技术领域中仍需学习和成长的态度。在网上,大家可能更熟悉他使用的这个ID,而不是他的真名。

 
from openai import OpenAI
from dotenv import load_dotenv, find_dotenv
_ = load_dotenv(find_dotenv())

client = OpenAI(
)

# 消息
messages = [
    {
        "role": "system",
        "content": "七三笔记网站是一个介绍AI相关知识的网站"  # 注入新知识
    },
    {
        "role": "user",
        "content": "七三笔记网站是做什么?"  # 问问题。可以改改试试
    },

]

# 调用 GPT-3.5
chat_completion = client.chat.completions.create(
    model="gpt-3.5-turbo",
    messages=messages
)

# 输出回复
print(chat_completion.choices[0].message.content)

 
七三笔记网站是一个介绍人工智能(AI)相关知识的网站,提供关于人工智能技术、应用、发展等方面的文章、教程和资讯。用户可以在网站上学习人工智能的基础知识,了解最新的人工智能技术趋势,以及探讨人工智能在各个领域的应用和发展。


 


 

  

 


langchain·openai

 
from dotenv import load_dotenv, find_dotenv
_ = load_dotenv(find_dotenv())
    

 
from langchain_openai import OpenAI

llm = OpenAI() 
prompt = """
我是七三学徒,热爱新技术,对AI有浓厚的兴趣,

请问七三学徒是谁?
"""
response = llm.invoke(prompt)
print(response)
    

执行的结果是有一定随机性的,尤其是这样LLM无法准确理解的问题

 
七三学徒不是一个具体的人,而是一个身份。一般指在某个领域或技术上只有初步了解的学习者,处于初级阶段的学习者。这个称呼源自中国古代的经典《论语》中的一句话:“七十而从心所欲,不逾矩”,意思是说人到70岁时,应该能够按照自己的意愿去做事,但也不要超过规矩。后来民间就用“七十从心所欲”来形容初学者,后来又简称为“七三学徒”。

七三学徒是一个网络用戶名,代表一个人的匿名身份,无法确定具体是哪个人

七三学徒是一个网络上的虚拟角色,代表着一个热爱新技术、对人工智能有浓厚兴趣的普通人。他/她并没有具体的身份和真实的存在,只是一种社交媒体上的身份标识。
    

 

    

 

    

 

    

 


 

  

 


langchain·监控

 
from langchain_community.callbacks import get_openai_callback
from langchain_openai import OpenAI

# 初始化
from dotenv import load_dotenv, find_dotenv
_ = load_dotenv(find_dotenv())

llm = OpenAI()
    

with中可以是llm直接调用,也可以是chain调用

 
with get_openai_callback() as cb:
    res = llm.invoke("如何培养持久学习的习惯?")
    print(res)  
    

 
1. 设定明确的学习目标:首先,要明确自己想要学习什么内容,设定明确的学习目标,这样可以让学习更有针对性和方向性。

2. 制定学习计划:制定一个学习计划,将学习内容分解成小目标,每天或每周规划学习的时间和内容,这样可以让学习变得更有条理,避免拖延和浪费时间。

3. 坚持每天学习:持久学习的关键是每天都要保持学习的习惯,可以设定固定的学习时间,保证每天都有一定的学习时间。

4. 找到适合自己的学习方式:每个人的学习方式都不同,有的人喜欢看书,有的人喜欢听课,
    

 
print(cb)
Tokens Used: 274
	Prompt Tokens: 18
	Completion Tokens: 256
Successful Requests: 1
Total Cost (USD): $0.000539
    

 

    

 

    

 

    

 


 

  

 


参考