在原项目的基础上,我们使用 Ollama 在本地部署 embedding 模型 mxbai-embed-large,生成模型使用openrouter提供的模型的api key的方式来调用,来运行 Generative Agents 项目。
环境
1 2 3 4 5
| No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 22.04.5 LTS Release: 22.04 Codename: jammy
|
Ollama的安装和模型的本地部署
- 在Linux系统安装Ollama
1
| curl -fsSL https://ollama.com/install.sh | sh
|
- 使用Ollama 安装embedding模型, 可安装模型列表
1 2
| ollama pull mxbai-embed-large
|
代码修改
主要修改文件 reverie/backend_server/persona/prompt_template/gpt_structure.py, 可参考文件gpt_structure.py 中的 model_request 的函数的request_type == "openrouter"
,
在文件开头添加变量
1 2 3 4
| OLLAMA_API_URL = "http://localhost:11434" MODEL = "deepseek/deepseek-chat" EMBEDDING_MODEL = "mxbai-embed-large:latest"
|
- 在generative_agents/reverie/backend_server/utils.py文件中添加变量,其中需要到openrouter注册账户并申请API KEY.
1 2
| OPENROUTER_API_KEY = "sk-or-v1-xxx" OPENROUTER_BASE_URL = "https://openrouter.ai/api/v1/chat/completions"
|
- 修改函数 ChatGPT_single_request(prompt), GPT4_request(prompt), ChatGPT_request(prompt)。
原代码:
1 2 3 4 5
| completion = openai.ChatCompletion.create( model="gpt-3.5-turbo", messages=[{"role": "user", "content": prompt}] ) return completion["choices"][0]["message"]["content"]
|
替换代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| response = requests.post( url=OPENROUTER_BASE_URL, headers={ "Authorization": f"Bearer {OPENROUTER_API_KEY}", }, data=json.dumps({ "model": MODEL, "messages": [ { "role": "user", "content": prompt } ] }) ) response_json = response.json() return response_json["choices"][0]["message"]["content"]
|
- 修改函数GPT_request(prompt, gpt_parameter)
原代码:
1 2 3 4 5 6 7 8 9 10 11
| response = openai.Completion.create( model=gpt_parameter["engine"], prompt=prompt, temperature=gpt_parameter["temperature"], max_tokens=gpt_parameter["max_tokens"], top_p=gpt_parameter["top_p"], frequency_penalty=gpt_parameter["frequency_penalty"], presence_penalty=gpt_parameter["presence_penalty"], stream=gpt_parameter["stream"], stop=gpt_parameter["stop"],) return response.choices[0].text
|
替换代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| response = requests.post( url=OPENROUTER_BASE_URL, headers={ "Authorization": f"Bearer {OPENROUTER_API_KEY}", }, data=json.dumps({ "model": MODEL, "messages": [ { "role": "user", "content": prompt } ] }) ) response_json = response.json() return response_json["choices"][0]["message"]["content"]
|
- 修改embeding 模型
原代码:
1 2 3 4 5 6
| def get_embedding(text, model="text-embedding-ada-002"): text = text.replace("\n", " ") if not text: text = "this is blank" return openai.Embedding.create( input=[text], model=model)['data'][0]['embedding']
|
替换代码:
1 2 3 4 5 6 7 8
| def get_embedding(text, model=EMBEDDING_MODEL): text = text.replace("\n", " ") if not text: text = "this is blank" response = ollama.embeddings(model=model, prompt=text) embedding = response["embedding"] return embedding
|
运行
运行部分不需要做任何修改,可参考原README文件,
References
论文PDF: Generative Agents: Interactive Simulacra of Human Behavior
论文作者提供代码: Github
修改代码参考: liberow